# Table of Contents

# Bean의 생명주기

Spring IoC Container빈(Bean)의 생성, 사용, 소멸을 제어하고 관리한다. 이 때문에 빈은 생명주기(Lifecycle)를 가지고 있다고 한다. 스프링 프레임워크는 빈의 생명주기를 탐지하는 다양한 방법을 제공한다.

# InitializingBean, DispoableBean

InitializingBean, DispoableBean 인터페이스를 구현하고 afterPropertiesSet(), destroy() 메소드를 구현하면 빈의 생성과 소멸을 탐지할 수 있다.

@Component
class Person implements InitializingBean, DispoableBean {
    
    @Override
    public void afterPropertiesSet() {
        // Bean 초기화 과정(ctx.refresh())에서 호출
    }

    @Override
    public void destroy() {
        // Bean 소멸 과정(ctx.close())에서 호출
    }		
}

# @PostConstruct, @PreDestory

@PostConstruct어노테이션을 추가한 메소드는 빈이 생성될 때 호출된다. 비슷하게 @PreDestory어노테이션을 추가한 메소드는 빈이 소멸할 때 호출한다.




 




 





@Component
class Person {
    
    @PostConstruct
    public void initMethod() {
        // Bean이 생성될 때 호출
    }

    @PreDestory
    public void destoryMethod() {	
        // Bean이 소멸할 때 호출
    }
}

# initMethod, destroyMethod

@Configuration, @Bean으로 빈을 등록하는 경우 @BeaninitMethod, destroyMethod로 생명주기 콜백을 지정할 수 있다.

public class MailManager {
    // ...

    public void initManager() {
        // ...
    }

    public void destroyManager() {
        // ...
    }
}



 





@Configuration
public class Config {

    @Bean(initMethod = "initManager", destroyMethod = "destroyManager")
    public MailManager mailManager() {
        return new MailManager();
    }
}